package modelo;

import java.util.ArrayList;

import fiuba.algo3.titiritero.modelo.ObjetoVivo;

public class Juego implements ObjetoVivo {
	
	final int puntajeInicial = 10000;
	final int puntajeDisparo = 200;
			
	private int puntaje;
	private TiempoDeJuego tiempo;
	private Tablero tablero = new Tablero();
	
	public Juego(){
		
		this.ingresarPuntaje(puntajeInicial);
		this.ingresarTiempo(new TiempoDeJuego());
	}

	public int obtenerPuntaje() {
		return puntaje;
	}

	public void ingresarPuntaje(int puntaje) {
		this.puntaje = puntaje;
	}
	
	public void colocarMina(Mina mina){			
		this.puntaje = puntaje - mina.obtenerCosto();
		this.tablero.agregarMina(mina); // Agregamos la mina al tablero
	}

	public TiempoDeJuego obtenerTiempo() {
		return tiempo;
	}

	public void ingresarTiempo(TiempoDeJuego tiempo) {
		this.tiempo = tiempo;
	}
	
	public void disparar (Posicion pos){
		this.puntaje = puntaje - puntajeDisparo;
		this.tablero.dispararNave(pos); 
	}
	
	public boolean juegoTerminado(){
		
		if (this.puntaje==0)
			return true;
		
		boolean terminado = false;
		ArrayList<Nave> listaNaves = this.tablero.obtenerListaNaves();
		
		for (Nave unaNave: listaNaves){
			if (!unaNave.destruida()){
				terminado = false;
				break;
			}
			else
				terminado = true; 
		}
		
		return terminado;
		
	}
	
	public void ingresarNaveEnTablero(Nave naveAIngresar){
		this.tablero.ingresarNave(naveAIngresar);
	}

	public Tablero obtenerTablero(){
		return this.tablero;
	}
	
	public void cargarNavesInicio() {		
		
		
		/*OBS: cuando implementemos movimientos diagonales, el primer parametro sera
		 * this.generarDireccionAleatoria();
		 * */
		Nave lancha1 = new Lancha(this.generarOrientacionAleatoria(),this.generarOrientacionAleatoria(),this.generarPosicionAleatoria());
		Nave lancha2 = new Lancha(this.generarOrientacionAleatoria(),this.generarOrientacionAleatoria(),this.generarPosicionAleatoria());
		Nave destructor1 = new Destructor(this.generarOrientacionAleatoria(),this.generarOrientacionAleatoria(),this.generarPosicionAleatoria());
		Nave destructor2 = new Destructor(this.generarOrientacionAleatoria(),this.generarOrientacionAleatoria(),this.generarPosicionAleatoria());
		Nave buque = new Buque(this.generarOrientacionAleatoria(),this.generarOrientacionAleatoria(),this.generarPosicionAleatoria());
		Nave rompeHielos = new RompeHielos(this.generarOrientacionAleatoria(),this.generarOrientacionAleatoria(),this.generarPosicionAleatoria());
		Nave portaAviones = new PortaAviones(this.generarOrientacionAleatoria(),this.generarOrientacionAleatoria(),this.generarPosicionAleatoria());
		
		this.ingresarNaveEnTablero(lancha1);
		this.ingresarNaveEnTablero(lancha2);
		this.ingresarNaveEnTablero(destructor1);
		this.ingresarNaveEnTablero(destructor2);
		this.ingresarNaveEnTablero(buque);
		this.ingresarNaveEnTablero(portaAviones);
		this.ingresarNaveEnTablero(rompeHielos);		
	}
	
	public Posicion generarPosicionAleatoria(){
				
		int fila = (int) (Math.random()*(10-1+1)+1);
		int columna = (int) (Math.random()*(10-1+1)+1);
		
		Posicion pos =new Posicion(fila,columna);		
				
		return pos;
	}
	
	public String generarOrientacionAleatoria(){
		String[] direcciones= {"norte","sur","este","oeste"};
		int indice = (int) (Math.random()*(3-0+1)+0);		
		
		return direcciones[indice];
	}
	
	public String generarDireccionAleatoria(){
		return "";
		/*
		 * lo dejo comentado porque todavia no implementamos los movimientos diagonales.
		String[] direcciones= {"norte","noreste","este","sureste","sur","suroeste","oeste","noroeste"};
		int indice = (int) (Math.random()*(7-0+1)+0);		
		
		return direcciones[indice]; */
	}

	@Override
	public void vivir() {
		this.tablero.siguienteTurno();
		
	}

	
	
}
